package com.denlaku.longan.lock;

import java.util.concurrent.TimeUnit;

/**
 *
 * @author tianx
 */
public interface Lock {
    /**
     * 尝试加锁
     *
     * @return 加锁是否成功
     */
    boolean tryLock();

    /**
     * 尝试加锁
     *
     * @param timeout 超时时长
     * @param unit 超时单位
     * @return 加锁是否成功
     * @throws Exception 异常
     */
    boolean tryLock(long timeout, TimeUnit unit) throws Exception;

    /**
     * 判断是否加锁
     *
     * @return 是否加锁
     */
    boolean isLocked();

    /**
     * 加锁
     *
     * @throws Exception 异常
     */
    void lock() throws Exception;

    /**
     * 释放锁
     */
    void unlock();

    /**
     * 强制释放锁
     */
    void forceUnlock();
}
